﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ucb.Workshop.Dal;
using Ucb.Workshop.Model;
using Ucb.Workshop.Business;
using Ucb.Workshop.Business.Util;

namespace Ucb.Workshop.WinApp.View.GestionProducto
{
    public partial class ControlEnlace : UserControl
    {
        DBManager conexion;
        string cod_proveedor;
        string empresa;
        string precioVenta;
        string precioCompra;
        string cod_marca;
        string nombreMarca;

        Producto _producto;
        Marca _marca;

        int filaEliminar = -1;
        public Marca Marca
        {
            get { return _marca; }
            set
            {
                _marca = value;
                if (_marca != null)
                {
                    txtMarca.Text = _marca.Nombre;
                    cod_marca = _marca.CodMarca.ToString();
                    nombreMarca = _marca.Nombre;
                }
            }
        }

        public Producto Producto
        {
            get { return _producto; }
            set { _producto = value; }
        }
        public ControlEnlace()
        {
            conexion = new DBManager();
            InitializeComponent();
        }

        private void btBuscarProducto_Click(object sender, EventArgs e)
        {
            SelectorProducto selProd = new SelectorProducto(this);
            selProd.Show();
            this.crearGridProvee();
        }
        public void llenarGridProveedor(string buscarEmpresa)
        {
            conexion.LlenarGrid(gridProveedor, "SELECT cod_proveedor, empresa FROM proveedor WHERE empresa LIKE '%" + buscarEmpresa.Trim() + "%'");
            gridProveedor.Columns[0].Visible = false;
            gridProveedor.Columns[1].HeaderText = "Proveedor";
        }
        public void crearGridProvee()
        {
            gridProvee.ColumnCount = 6;
            gridProvee.Columns[0].Visible = false;
            gridProvee.Columns[1].HeaderText = "Proveedor";
            gridProvee.Columns[2].HeaderText = "Precio Venta";
            gridProvee.Columns[3].HeaderText = "Precio Compra";
            gridProvee.Columns[4].Visible = false;
            gridProvee.Columns[5].HeaderText = "Marca";
        }
        public void blockProducto()
        {
            btBuscarProducto.Enabled = false;
            txtProducto.Text = this.Producto.Descripcion;
        }

        private void btAdd_Click(object sender, EventArgs e)
        {
            if (this.Marca != null && this.cod_proveedor != null)
            {
                if (UtilControl.ValidarTextBoxDecimal(txtPrecioCompra) && UtilControl.ValidarTextBoxDecimal(txtPrecioVenta))
                {

                    precioVenta = txtPrecioVenta.Text.Trim();
                    precioCompra = txtPrecioCompra.Text.Trim();
                    if (float.Parse(precioVenta) < float.Parse(precioCompra))
                        MessageBox.Show("El precio de compra es mayor al de venta!!!");
                    else
                        this.setFila();
                }
                else
                {
                    MessageBox.Show("El precio debe ser un numero valido!!!");
                }
            }
            else
                MessageBox.Show("Debe seleccionar un Proveedor y una Marca!!!");
            
        }
        public string datoGridProveedor(int fila, int columna)
        {
            return gridProveedor.Rows[fila].Cells[columna].Value.ToString();
        }

        private void gridProveedor_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int fila = e.RowIndex;
            int columna = e.ColumnIndex;
            int numerofilas = gridProveedor.Rows.Count;

            if (numerofilas > 0 && fila > -1 && fila < numerofilas - 1)
            {
                cod_proveedor = datoGridProveedor(fila, 0);
                empresa = datoGridProveedor(fila, 1);
                txtProveedor.Text = empresa;
            }
        }
        public void setFila()
        {
            if (!esDetalle())
            {
                string[] fila = { cod_proveedor, empresa, precioVenta, precioCompra, cod_marca, nombreMarca };
                gridProvee.Rows.Add(fila);
                cod_proveedor = null;
                empresa = null;
                txtProveedor.Text = "";
            }
            else
                MessageBox.Show("ya registro un detalle con la marca y proveedor seleccionado");
        }
        public bool esDetalle()
        {
            bool existe = false;

            for (int i = 0; i < gridProvee.Rows.Count - 1; i++)
            {
                string esProveedor = gridProvee.Rows[i].Cells[1].Value.ToString();
                string esMarca = gridProvee.Rows[i].Cells[5].Value.ToString();
                if (empresa.Equals(esProveedor) && nombreMarca.Equals(esMarca))
                {
                    existe = true;
                    break;
                }
            }

            return existe;
        }

        private void btRegistrar_Click(object sender, EventArgs e)
        {
            if (this.Producto != null)
            {
                int numeroFilas = gridProvee.Rows.Count;
                for (int i = 0; i < numeroFilas - 1; i++)
                {

                    Provee provee = new Provee();
                    provee.CodProducto = this.Producto.Cod_producto;
                    //MessageBox.Show(gridProvee.Rows[i].Cells[0].Value.ToString().Trim());
                    provee.CodProveedor = int.Parse(gridProvee.Rows[i].Cells[0].Value.ToString().Trim());
                    provee.PrecioVenta = float.Parse(gridProvee.Rows[i].Cells[2].Value.ToString().Trim());
                    provee.PrecioCompra = float.Parse(gridProvee.Rows[i].Cells[3].Value.ToString().Trim());
                    provee.CodMarca = int.Parse(gridProvee.Rows[i].Cells[4].Value.ToString().Trim());

                    provee.Insertar();


                }

                MessageBox.Show("Proveedores registrados!!!");
                this.limpiarFormulario();

            }
            else
                MessageBox.Show("Debe seleccionar un producto!!!");

        }
        public void limpiarFormulario()
        {
            txtPrecioCompra.Text = "";
            txtPrecioVenta.Text = "";
            //this.txtMarca.Text = "";
            //this.Marca = null;
            txtProducto.Text = "";
            this.Producto = null;
            this.btBuscarProducto.Enabled = true;
            gridProvee.Rows.Clear();
        }
        private void txtPrecioCompra_TextChanged(object sender, EventArgs e)
        {
            UtilControl.EsDecimal(txtPrecioCompra);
        }

        private void txtPrecioVenta_TextChanged(object sender, EventArgs e)
        {
            UtilControl.EsDecimal(txtPrecioVenta);
        }

        private void txtBuscarProveedor_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtBuscarProveedor_KeyUp(object sender, KeyEventArgs e)
        {
            llenarGridProveedor(txtBuscarProveedor.Text);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            prueba selMarca = new prueba(this);
            selMarca.Show();
        }
        public string datoGridProvee(int fila, int columna)
        {
            return gridProvee.Rows[fila].Cells[columna].Value.ToString();
        }

        private void btDEL_Click(object sender, EventArgs e)
        {
            //MessageBox.Show(filaEliminar.ToString());
            if (filaEliminar != -1)
            {
                gridProvee.Rows.RemoveAt(filaEliminar);
                filaEliminar = -1;
            }
        }

        private void gridProvee_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            filaEliminar = e.RowIndex;
        }
    }
}
